/**
 递归的特点总结：

 1、自调用，就是在函数里面调用自己

 2、最关键的一点，就是一个递归必须明确结束条件，不然就会陷入无穷的死循环

 3、缺点，就是消耗大量内存
 */


var count = 0;
function fun(){
    count++;
    if(count<5){
        fun()
    }
    console.log("fun running...")
}

fun()

//递归实现：求n个数字的和 n=5 ------->5+4+3+2+1
function getSum(n){
    if(n == 1){
        return 1
    }
    return n + getSum(n-1)
}
var sum1 = getSum(5)
console.log("sum1: ",sum1) // sum1:  15




/*
递归实现 反正字符串
基本思想是利用字符串本身的charAt方法。
从尾部开始遍历字符串，然后逐个拼接字符，得到最终的结果。

 srtIn 待转化的字符串
 pos 字符串索引
 strOut 逆序后的字符串
 */
function reverseString(str){

    var strIn = str
    var pos = strIn.length-1
    var strOut = ''

    function reverse(strIn,pos,strOut){
        if(pos<0){
            return strOut
        }else{
            strOut += strIn.charAt(pos--)
            return reverse(strIn,pos,strOut)
        }

    }
    return reverse(strIn,pos,strOut)
}

var str = '123456'
console.log('reverseString: ',reverseString(str)); // 654321




//递归反转数组
function reverseArr(arr){

    var arrIn = arr
    var arrOut = []

    function reverse(arrIn,arrOut){
        if(arrIn.length<1){
            return arrOut
        }else{
           arrOut.push(arrIn.pop())
            return reverse(arrIn,arrOut)
        }
    }
    return reverse(arrIn,arrOut)
}

console.log("reverseArr: ",reverseArr([1,2,3]));

